Machine-readable symbology and method and apparatus for printing and reading same

ABSTRACT

A new bar code symbology in an exemplary embodiment employs three bars (and spaces) within nine modules, similar to Code 93. Fifty-three data characters are defined, including several special mode characters. By employing these special mode characters, together with certain routines, three symbol characters can represent two 8-bit bytes, or one 16-bit word. As a result, the symbology can efficiently encode 8-bit bytes for use in computer processing, or encode 16-bit character sets such as Unicode. Symbology encodes extended channel interpretation (ECI) numbers, provides multiple numeric compression modes, provides a structured append using a single mode character, as well as other features. Additionally, the symbology includes error correction, with a Special Features Flag character indicating use of error correction in a symbol.

CROSS-REFERENCES TO RELATED APPLICATIONS

This application is a continuation-in-part of application Ser. No.08/842,644, filed Apr. 16, 1997, now pending, which is acontinuation-in-part of application Ser. No. 08/701,304, filed Aug. 21,1996, now U.S. Pat. No. 5,811,781, which is a continuation-in-part ofapplication Ser. No. 08/295,382, filed Aug. 24, 1994, now U.S. Pat. No.5,557,092, issued Sep. 17, 1996, which is a continuation-in-part ofapplication Ser. No. 08/147,376, filed Nov. 5, 1993, now abandoned.

TECHNICAL FIELD

This invention relates to a new machine-readable symbology, and devicesand methods for reading or printing symbols under the symbology.

BACKGROUND OF THE INVENTION

Bar code symbologies were first disclosed in U.S. Pat. No. 1,985,035 byKermode and expanded shortly thereafter in the 1930's in U.S. Pat. No.2,020,925 by Young, assigned to Westinghouse. These early symbologieswere printed by generating a multiplicity of single width elements oflower reflectance, or "bars," which were separated by elements of higherreflectance, or "spaces." An "element" is a bar or space. These earlysymbologies, and many "bar code symbologies" used today can be referredto as "linear symbologies" because data in a given symbol is decodedalong one axis or direction. Symbologies such as linear symbologiesencode "data characters" (e.g., human readable characters) as "symbolcharacters," which are generally parallel arrangements of alternatingbars and spaces that form unique groups of patterns to encode specificdata characters. "Data characters" include not only human readablecharacters, but also include special function characters such as start,stop or shift characters that provide certain functional data. Eachunique group or pattern of bars and spaces within a predetermined widthdefines a particular symbol character, and thus a particular datacharacter or characters.

The known U.P.C. symbology can be described generically as a (7,2) "n,kcode." An "n,k code" is defined as a symbology where each symbolcharacter has "k" number of bars and spaces and whose total length is"n" modules long. Therefore, the U.P.C. symbology encodes two bars andtwo spaces in each symbol character and each symbol character is sevenmodules long. A "module" is the narrowest nominal width unit of measurein a bar code symbology (a one-wide bar or space). "Nominal" refers tothe intended value of a specific parameter, regardless of printingerrors, etc. Under common counting techniques, the number of possiblesymbol characters can be found by realizing that in seven modules, thereare six locations where a transition can occur, and that for two barsand two spaces, there are three internal transitions. Therefore, thenumber of unique symbol characters for the U.P.C. symbology is simply 6choose 3 which equals 20. Similarly, under the Code 128 symbology, whichis an (11,3) symbology, 252 unique symbol characters are available (10choose 5).

The bar code symbologies known as U.P.C., EAN, Code 11 and Codabar areall bar code symbology standards which support only numeric datacharacters, and a few special characters such as "+" and "-". The U.P.C.symbology is both a bar code standard, as well as an industry standard,in that it has been adopted by industry in a standard application(consumer goods). The bar code standard Code 39 was the firstalphanumeric bar code symbology standard developed. However, it waslimited to 43 characters.

Code 93 is an improvement over Code 39. Code 93 is a continuous bar codesymbology employing four element widths. Each Code 93 symbol has ninemodules that may be either black or white (either a bar or a space).Each symbol in the Code 93 standard contains three bars and three spaces(six elements), whose total length is nine modules long. Code 93, havingnine modules and three bars per symbol is thus a (9,3) symbology whichhas 56 possible characters (8 choose 5). For edge to edge decodingreasons, the Code 93 symbology standard defines only 48 unique symbols,and thus is able to define 47 characters in its character set plus astart/stop code. The 47 characters include the numeric characters 0-9,the alphabetic characters A-Z, some additional symbols and four shiftcodes.

The computer industry uses its own character encoding standards, namely,the American Standard Code for Information Interchange (ASCII). ASCIIdefines a character set containing 128 characters and symbols. Eachcharacter in ASCII is represented by a unique 7-bit code. Since Code 39and Code 93 are limited to fewer than 50 characters, these standards areinadequate to uniquely represent each ASCII character. The four shiftcodes in Code 93, however, allow this standard to unambiguouslyrepresent all 128 ASCII characters. One drawback is that a series of twoCode 93 symbols are required to represent a single ASCII character.Thus, bar code labels representing characters in the ASCII character setare twice as long as labels representing characters in the Code 93character set.

New bar code symbology standards, such as Code 128, were developed toencode the complete ASCII character set, however, these standards sufferfrom certain shortcomings, including requiring shift codes or otherpreceding symbols to represent certain characters. All of thesesymbologies require increased processing time and overhead to processthe entire ASCII character set.

The computer industry has grown beyond the limits of the ASCII characterset. As the computer markets have grown, the need has also arisen tosupport additional languages not defined by the ASCII character set. Newcharacter sets were developed to accommodate clusters of characters inrelated languages. The original 7-bit ASCII character set was expandedto 8 bits thus providing an additional 128 characters or data values.This additional 128 set of data values (the "upper 128" or "extendedASCII") allowed for additional characters present in the related romancelanguages (i.e., French, German, Spanish, etc.) to be represented. Theonly linear symbologies capable of encoding 8-bit data are Code 128, and"Code 53", which is described in the inventor's U.S. Pat. No. 5,619,027,entitled "Single Width Bar Code Symbology With Full Character SetUtilizing Robust Start/Stop Characters and Error Detection Scheme." BothCode 128 and Code 53 encode 8-bit data by using single or doublefunction shift characters, and thus require increased processing timeand overhead, since every byte value must be analyzed before a datacharacter is encoded.

As the computer markets grew internationally, however, even morelanguages were required to be included in the character set.Particularly, the Asian markets demanded a character set, usable oncomputers, which supported thousands of unique characters. To uniquelydefine each of these characters, a 16-bit encoding standard wasrequired.

Several 16-bit encoding standards such as Unicode, JISC-6226-1983, andothers have recently been developed. The Unicode character encodingstandard is a fixed-length, uniform text and character encodingstandard. The Unicode standard may contain up to 65,536 characters, andcurrently contains over 28,000 characters mapping onto the world'sscripts, including Greek, Hebrew, Latin, Japanese, Chinese, Korean, andTaiwanese. The Unicode standard is modeled on the ASCII character set.Unicode character codes are consistently 16 bits long, regardless oflanguage, so no escape sequence or control code is required to specifyany character in any language. Unicode character encoding treatssymbols, alphabetic characters, and ideographic characters identically,so that they can be used in various computer applications simultaneouslyand with equal facility. Computer programs using Unicode characterencoding to represent characters, but which do not display or printtext, can remain unaltered when new scripts or characters areintroduced.

New computer operating systems are beginning to support thesecomprehensive 16-bit code standards, e.g., WINDOWS NT, manufactured byMicrosoft Corporation of Redmond, Wash. The data collection industry,however, has failed to keep pace with the computer industry. No systemcurrently exists for readily encoding the 16-bit computer charactercodes into bar code symbols. Therefore, there is a need to support these16-bit computer character standards in the data collection industry,particularly for bar code symbologies.

Furthermore, most alphanumeric bar code symbologies are inefficient whenused to encode a long series of numbers or lower case alphabeticcharacters. For example, when encoding a series of decimal numbers usingCode 93 for example, the 26 bar code symbols reflecting the 26alphabetic characters are not used. Therefore, there is a need to allowthese alphanumeric bar code symbologies to more efficiently represent along series of numbers. Additionally, many symbologies lack errorcorrection features.

SUMMARY OF THE INVENTION

The present invention solves the above problems and provides additionalbenefits. Under one embodiment of the present invention, a group shiftfeature permits strings of lower case alphabetic characters, numericcharacters and other lower ASCII characters to be decoded efficiently,for example within 10.8 modules per symbol character for a group of tenof such lower case alphabetic/numeric characters.

Under another embodiment, an error correction or Special Features Flagcan be employed to indicate error correction characters within a symbol.The Special Features Flag character is positioned within the middle of asymbol, followed by a message length indicator character. Under anexemplary embodiment, a symbol employing error correction includes fiveerror correction characters, which permit two errors or three erasuresto be corrected within the symbol. Furthermore, beginning or endportions of a symbol can be corrected, and the symbol can be encoded inhalves.

Under another embodiment, a symbology avoids complex methods of encoding8-bit and 16-bit data by describing a simple byte encodation mode whichworks on any byte value uniformly. Under the exemplary embodiment, thepresent symbology is similar to the Code 93 symbology, and thus symbolcharacters are only nine modules long. Three symbol characters encodetwo 8-bit bytes. Thus, a byte requires approximately 13.5 modules,regardless of the byte value. Further reduction in the number of modulesto encode data characters are permitted under the exemplary symbology,such as strings of digits or base Code 93 data characters.

Under an embodiment of the present invention, extended channelinterpretation (ECI) numbers are officially encoded. As a result, a hostcomputer system to which a reader can be coupled can uniquely decode thecoded messages anywhere in the world regardless of the underlyingcharacter sets or applications employed by the host computer.Sixteen-bit characters are represented by three characters under theexemplary symbology, while in another mode, two 8-bit bytes arerepresented by three symbol characters. By representing two 8-bit byteswithin three symbol characters, extended ASCII data characters can beofficially encoded, as well as other relatively small internationalcharacter sets, such as the ISO series 8859-1-8859-9.

In a broad sense, the present invention embodies a machine-readablesymbology having a plurality of symbol characters. The machine-readablesymbology includes an error correction flag symbol character thatindicates that at least one error correction symbol character is presentwithin a group of symbol characters.

Additionally, the present invention embodies an machine-readablesymbology having a plurality of symbol characters, wherein a group ofsymbol characters form a printable symbol. The machine-readablesymbology includes a Special Features Flag symbol character thatindicates a first function at a first location within the printablesymbol. The Special Features Flag symbol indicates a second function ata second location within the printable symbol. Aspects of the presentinvention also embody methods and apparatus for printing and readingmachine-readable symbols and other embodiments and aspects of thepresent invention.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is an example of a label having bar code symbol characters, withhuman readable characters, printed or read under an exemplary embodimentof the present invention.

FIG. 2 is a table showing symbol values and associated symbol charactersand data characters for an exemplary symbology under the presentinvention.

FIG. 3 shows an exemplary symbol character format.

FIG. 4 shows the bar code symbol of FIG. 1, with each symbol characteridentified with its associated data character.

FIG. 5 is a table showing full ASCII data characters encodable undersymbology of FIG. 2.

FIG. 6 is a block diagram of a bar code symbol printing apparatus of thepresent invention.

FIG. 7 is an exemplary flow chart showing the basic steps performed bythe printing apparatus of FIG. 6 for printing bar code symbols under theexemplary embodiment.

FIG. 8 is a block diagram of a bar code symbol reading apparatus of thepresent invention.

FIG. 9 is a flow chart showing the basic steps performed by the readingapparatus of FIG. 8 for reading bar code symbols under the exemplaryembodiment.

FIG. 10 is a schematic diagram of a 93i symbol employing errorcorrection characters.

DETAILED DESCRIPTION OF THE INVENTION

As used generally herein, the following definitions apply: "datacharacters" refers to human readable characters, including symbols,numeric characters, alphabetic characters, and ideographic characters,as well as non-readable data, such as function codes, shift codes, etc.;"numeric string" refers to a sequence of numeric characters, typicallydecimal digits; "character codes" refers to a code, typically numeric,which refers to a data character within a set of character codes andcorresponding data characters, such as ASCII, where "8-bit code" refersto an extended ASCII code corresponding to a data character in the ASCIIstandard, and "16-bit code" or "16-bit character code" refers to ahexadecimal or decimal representation of a data character in a 16-bitcharacter encoding standard, such as Unicode; "bar code symbology"refers to a set of machine-readable or symbol characters for uniquelyrepresenting a set of data characters; "symbol value" refers to a codesuch as an ordinal number representing a data character in a bar codesymbology; "symbol character" refers to the unique geometric shapes orbar and space patterns used in a bar code symbology to representparticular data characters; "bar code standards" refers to a bar codesymbology recognized by, or regularly used in, data collectionapplications (e.g., Code 128, Code 93); and, "counts" refers to a uniqueset of electrical signals produced when reading a symbol charactercorresponding to a data character in a bar code symbology.

For example, in the 16-bit character encoding standard Unicode, the datacharacter "A" is represented by the 16-bit code "0041" in hexadecimalnotation and "65" in decimal. The data character "A" has a symbol valueof "10" in the bar code symbology Code 93. The symbol value 10 in Code93 corresponds to a symbol character having a pattern of a two modulewidth bar followed by: a single module width space, a single modulewidth bar, a single module width space, a single module width bar, and athree module width space. The counts associated with the printing ofthis symbol are generally unique to each printer, and for a thermalprinter, would represent the time intervals between transitions betweenbars and spaces to appropriately activate the printer's heating elementas the thermal sensitive paper moved past it where the bars arepositioned perpendicular to the direction of the label through theprinter. Alternatively, the counts can indicate which dots orthermal-print elements to activate when the bars are parallel with thedirection of the label through the printer.

A new bar code or linear symbology under an embodiment of the presentinvention, generally referred to herein as "93i," efficiently encodesbytes and words of data, to uniquely represent each 16-bit code in any16-bit character code, encode ECI characters, as well as provideadditional features described in detail herein. FIG. 1 shows an exampleof a label 101 printed or read under the 93i symbology. As shown in FIG.1, the label 101 includes a series of bar code symbols which encode datacharacters, as well as corresponding human readable characters printedthereunder.

The 93i symbology is similar to Code 93. As a result, the 93i symbologyencodes numeric, alpha-numeric, and the full 128 ASCII characters.Additionally, the 93i symbology encodes the extended ASCII charactersand all international character sets, such as those represented by16-bit character codes. The 93i symbology is continuous and employs asymbol structure, as described below, having six elements per symbol,with three bars and three spaces. Characters under the 93i symbology arenot self-checking and symbol length is variable. The 93i symbologyemploys two symbol check characters or optional error correctioncharacters. The 93i symbology employs the equivalent of 37 modules asnon-data overhead. Importantly, the 93i symbology permits data characterdensity as follows: 5.4 modules per numeric digit, 9 modules per symbolcharacter for alpha-numeric data, 13.5 modules for full ASCII andextended ASCII (as defined under the ISO8859 8-bit single-byte codedgraphic character set standard), up to 10.5 modules for strings of lowercase alphabetic characters and other lower ASCII characters, and 27modules per Asian or 16-bit character code characters. Additionally, thepresent symbology supports the Extended Channel Interpretation (ECI)protocol (described below), and is fully compatible with the existingCode 93 symbology.

FIG. 2 shows the symbol character assignments for each data character inthe 93i symbology. The "value" column in FIG. 2 represents the symbolvalue for each symbol character. As described herein, the symbol valueis used to compute not only check or error correction characters, but isalso employed in various data compression methods. The "character"column in FIG. 2 lists the alternating bar and space pattern for eachsymbol character, where a "1" corresponds to one module, "2" correspondsto two modules, etc. Each character begins with a bar. The "data" columnin FIG. 2 represents a base data character corresponding to each symbolcharacter, or the functionality of the symbol character. As shown inFIG. 2, symbol values 00-46, and their corresponding symbol charactersand data characters match the corresponding symbol values, symbolcharacters, and data characters in the Code 93 symbology, as well as thestart and stop symbol characters. Alternatively, a stop characterconsisting of the bar and space pattern similar to the start character,but terminating in a two-wide bar can be employed i.e., 2, 1, 3, 1, 1,2. In another alternative, a stop character consisting of the startcharacter, but including an additional two-wide bar at the end, can beemployed, i.e., 2, 1, 3, 1, 1, 1, 2. Such alternative stop charactersdifferentiate the symbology from the Code 93 symbology, and provide acharacter having wide elements at the beginning and end of thecharacter, to facilitate out-of-focus decoding.

Unlike the Code 93 symbology, the 93i symbology employs 53 symbolvalues, rather than the 47 employed in the Code 93 symbology.Specifically, the 93i symbology adds symbol values 47-52 and two startcharacters. A first start character beginning with a bar space barpattern of 2, 1, 3, 1, 1, 1 indicates that the symbol is a 93i symbol,and therefore can include symbol values 47-52. By employing two widebars separated by a single width space in the 93i start character, areader can determine whether the symbol is in focus by determiningwhether the single width space is resolved. If the reader identifies a5-width bar in the 93i start character, then the reader determines thatthe symbol is likely out of focus since the 1-wide space is unresolved.

Another start character is identical to the start symbol for the Code 93symbology, and indicates that the symbol is encoded using only validCode 93 symbol characters. For evenly mixed alphanumeric messages,employing only upper case alphabetic characters, the Code 93 symbologyprovides the most efficient character density, and is thereforepreferred for such messages.

As shown in FIG. 3, the symbol character structure for each symbolcharacter in the 93i symbology employs 3 bars and 3 spaces in 9 modules.Each bar or space is 1, 2, 3, or 4 modules in width. As in the Code 93symbology, the 93i symbology employs a leading quiet zone (QZ) having aminimum width equal to ten times the X dimension, one of two startsymbol characters, one or more symbol characters encoding datacharacters, two symbol check characters (referred to as "C" and "K"), astop symbol character, and a trailing quiet zone. A symbol may includean error correction or special function flag and message lengthindicator within the middle of a symbol, and five error correctioncharacters, as discussed below. FIG. 4 shows the symbol characters inthe label 101 (without error correction) parsed into individual symbolcharacters, represented by short vertical lines between each symbolcharacter, together with the corresponding data character for eachsymbol character.

As noted above, each 93i symbol contains two check characters thatimmediately precede the stop symbol character. A modulo 53 sum isemployed under the check algorithm for all symbol values in the symbol.

As with the Code 93 symbology, the check character "C" is computed basedon the modulo sum of the products of the symbol values, as shown in FIG.2, multiplied by a weighting sequence. The weighting sequence, fromright to left (from the stop symbol character to the start symbolcharacter), starting with the immediately preceding character, are inthe repeating sequence 1,2,3, . . . 20, 1,2,3, . . . 20, 1,2, . . . .The check character "K" is produced based on the modulo sum of theproducts of the symbol values and a different weighting sequence, wherethe weights from right to left, beginning with the check character "C"are in the repeating sequence 1,2,3, . . . 15, 1,2,3, . . . 15, 1,2, . .. . As in the Code 93 symbology, the start and stop symbol charactersare not included in the check character calculations.

For example, considering the symbol of FIG. 4, the data characters are,from left to right, 9,3,i,[ECI 16], {30908}. "[ECI 16]" refers to theECI value 000016, while "{30908}" is the Asian character having the16-bit code 30908 in the Unicode standard (which is pronouncedapproximately as "MA"). As used generally herein, the term "symbol" usedalone refers to a collection of symbol characters, such as those shownin the label 101. The numeric data characters "9" and "3" are encodeddirectly, while the data character "i" must be encoded with a shiftcharacter (as described below). As used generally herein, the term"character" used alone refers to either a data character or itscorresponding symbol value. The [ECI 16] data character is formed withtwo symbol characters, while the Asian character {30908} employs a WordMode discussed below. Briefly, the value 30908 is encoded under theformula (16*43²)+(30*43)+34. As a result, the symbol values for theresulting string of symbol characters for encoding the data is:[09][03][46][18][47][16][50][16][30][34]. Employing the above checkcharacter algorithm, with appropriate weighting, the calculation for thecheck character "C" from right to left is as follows. ##EQU1##Similarly, the check character "K" is calculated from a weighting whichincludes "C": ##EQU2##

As noted above, the 93i symbology employs several special characters. Aswith the Code 93 symbology, the 93i symbology employs four shiftcharacters [S1]-[S4], having symbol values 43-46, shown in FIG. 2. Ashift character preceding a symbol value 10-35 represents a single fullASCII data character, as shown in the table of FIG. 5. The charactercombinations [S3]A through [S3]Z in the second column of FIG. 5 arevalid and may be used under the 93i symbology to produce the ASCIIcharacters associated with the single characters indicated. For example,the data character "Q" can be represented by the single symbol value[81] or by the two symbol values [S3][81]. The character pairs [S2] witheither X, Y, or Z all encode the ASCII value DEL (delete).

When a shift character [S1]-[S4] is followed by a symbol value of 0 to 9or 36 to 46, a consecutive string or group of 3 to 23 shifted charactersare indicated based on the particular initial shift character. As shownin FIG. 5, the characters space (sp), $, %, +, -, ., /, and the numericdigits 0-9 are unshifted and not used to provide any shifted characters.Therefore, such characters, having character values 0-9 and 36-46, canbe used to provide additional functionality, namely the group shiftfunction. The number of shifted characters in a group are indicatedbased on the following table:

                  TABLE 1                                                         ______________________________________                                        Shift Character and                                                                          Number (Group) of                                              Subsequent     Subsequent Shifted                                             Character Value                                                                              Characters                                                     ______________________________________                                        [S?][0]        3                                                              [S?][4]        7                                                              [S?][8]        11                                                             [S?][38]       15                                                             [S?][42]       19                                                             [S?][46]       23                                                             [S?][1]        4                                                              [S?][5]        8                                                              [S?][9]        12                                                             [S?][39]       16                                                             [S?][43]       20                                                             [S?][2]        5                                                              [S?][6]        9                                                              [S?][36]       13                                                             [S?][40]       17                                                             [S?][44]       21                                                             [S?][3]        6                                                              [S?][7]        10                                                             [S?][37]       14                                                             [S?][41]       18                                                             [S?][45]       22                                                             ______________________________________                                    

where "[S?]" corresponds to one of the shift characters [S1]-[S4]. Inother words, one of the four shift characters [S1]-[S4] followed by asymbol value 0-9 or 36-46 provides a latch function for a predeterminednumber of subsequent characters, the subsequent characters being latchedto their corresponding shifted values based on the initial shiftcharacter. For example, if the data "Modulo 53" in encoded, the 93icharacters "M[S4][S2]ODULO[sp]53" are used, which corresponds to thesymbol values "22, 46, 02, 24, 13, 30, 21, 24, 38, 05 and 03."

A single shift character can be used within a group of shiftedcharacters to either (1) shift the one subsequent character based on thepreceding shift character, or (2) if the characters are currentlyshifted into the same set indicated by the initial shift character, thento shift the one subsequent character to the base 93i character set.Both the shift character within the string of shifted characters and theone subsequent character are included in the group length of Table 1."Shifted string" and "shifted character" refer to either a string ofdata characters or an individual data character derived using one of theshift characters [S1]-[S4] based on the table of FIG. 5.

For example, if the data message "Modulo 53 Math" is encoded, thefollowing 93i characters are employed:

"M[S4][37]ODULO[sp]53[sp][S4]MATH".

Note that the character value [37] indicates based on Table 1 above thatthe following fourteen characters are shifted according to the table ofFIG. 5. Since the shift character [S4] is included within the string offourteen shifted characters, the immediately subsequent character in thegroup is unshifted or corresponds to the base 93i set of datacharacters. If a shift character [S1]-[S3] were used instead, then theimmediately subsequent character is shifted according to the table ofFIG. 5 based on which of the three shift characters was used. Note alsothat if the character values 0-9 (corresponding to the data characters0-9) or character values 36-42 (corresponding to the data characters -,., sp, $, /, +, %) appear in a symbol surrounded by shifted characters,such character values are encoded directly as part of the shiftedstring. A Numeric Mode or Function 1 (FNC 1) character (discussed below)can be used within a shifted string, but ECI, Byte Mode and Word Modecharacters (discussed below) may not.

The 93i symbology employs an ECI character [47], having a symbol value47, that encodes information regarding prescribed meanings of bytes orsubsequent data in a given symbol. The AIMI ECI Assignments documentassigns ECI numbers and the meaning of bytes or data based on the ECInumbers. ECI numbers range from 000000 to 811799. For example, one ECInumber represents the encoding of international character sets. The 93isymbology encodes ECI numbers by placing the ECI number anywhere withina symbol and following it by 1, 2, 3, or 4 symbol values selected fromsymbol values 0-51 of FIG. 2.

A backslash character "\" (reverse solidus), having ASCII value 92 (seeFIG. 5), is transmitted before the six digit ECI value. The backslashcharacter behaves as an escape character to a host computer or systemreceiving the string of symbol values or data produced when a symbol isread. If a backslash character is to be placed within the encoded data,two backslash characters must be encoded within the symbol so that thehost knows that a single backslash character is desired, rather than anECI value. Likewise, if two backslash characters are desired, fourbackslash characters must be encoded for the host to know that twobackslash characters are desired. The rules for encoding ECI numbersunder the 93i symbology are presented below in Table 2.

Summarizing, for ECI numbers 0-899, bytes or data following such numbersare encoded directly even if the data could be compressible otherwise.For example, an ECI number 89 can represent the beginning of aparticular type of encrypted data. The encrypted data which followsthereafter, while compressible, is encoded directly. However, if digitsor full ASCII characters are encoded after an ECI number between 0-899,the Numeric Mode or Byte Mode (described below) can be used to therebyemploy the lower 128 ASCII values and corresponding symbol values asshown in FIG. 5. If ECI numbers are encoded within a string of datacharacters, which are encoded under the Word Mode (described below),then the full 128 ASCII values are employed with eight zeros prependedthereto. ECI numbers 900-811799 are encoded as bytes in their mostefficient mode, and the Word Mode character ([50]) is prohibited. Forinstance, for ECI number 950, if strings of 93i symbol values 0-9 needto be encoded, the Numeric Mode is employed, even though the values ofthe data characters may not correspond to the numbers employed under themode specified by ECI 950.

Table 2 below summarizes rules for encoding ECI values under the 93isymbology. In Table 2 below, "div" refers to the integer divisionoperator, while "mod" refers to the modulo division operator. "C1"refers to the most significant position, while "C4" refers to the leastsignificant position.

                                      TABLE 2                                     __________________________________________________________________________    ECI Value                                                                              Chars.                                                                             Value            Range                                          __________________________________________________________________________    000000-000043                                                                          C1   ECI.sub.-- val   C1 = 0 to 43                                   000044-000095                                                                          C1   44               C1 = 44                                                 C2   ECI.sub.-- val - 44                                                                            C2 = 0 to 51                                   000096-002799                                                                          C1   45               C1 = 45                                                 C2   (ECI.sub.-- val - 96)div 52                                                                    C2 = 0 to 51                                            C3   (ECI.sub.-- val - 96)mod 52                                                                    C3 = 0 to 51                                   002800-811799                                                                          C1   ((ECI.sub.-- val - 2800)div 140608) + 46                                                       C1 = 46 to 51                                           C2   ((ECI.sub.-- val - 2800)div 2704)mod 53                                                        C2 = 0 to 51                                            C3   ((ECI.sub.-- val - 2800)div 52) mod 52                                                         C3 = 0 to 51                                            C4   (ECI.sub.-- val - 2800)mod 52                                                                  C4 = 0 to 51                                   __________________________________________________________________________

For example, to encode an ECI value of 000020, the following twocharacter strings are used: [47][20] where [47] is the ECI symbol value47, and [20] is the 93i character "K".

To encode an ECI value of 002000, the following steps are followed toobtain the three required characters:

[47][45][(ECI₋₋ val-96)div 52][(ECI₋₋ val-96)mod 52]=

[47][45][1904 div 52][1904 mod 52]=

[47][45][36][32]

Finally, to encode an ECI value of 200000, the following steps arefollowed to obtain the four required characters:

[47][(ECI₋₋ val-2801)div 140608+46][((ECI₋₋ val-2801)div 2704)mod52][((ECI₋₋ val-2801)div 52) mod 52][(ECI₋₋ val-2801)mod 52]=

[47][197199 div 140608+46][197199 div 2704 mod 52][197199 div 52 mod52][197199 mod 52]=

[47][1+46][72 mod 52][3792 mod 52][15]=

[47][47][20][48][15]

Symbol value 48 represents a numeric compaction mode in the Code 93symbology, referred to herein as "Numeric Mode." Under the Numeric Mode,five numeric digits are compressed into three symbol characters. Thus,sequences of five or more digits should be compressed using the 5/3Numeric Mode. The Numeric Mode character, symbol value 48, toggles intoand out of the 5/3 numeric compression mode. Likewise, the Byte Mode andWord Mode characters, symbol values 49 and 50 respectively, can be usedto exit from the Numeric Mode also. If a symbol ends while in NumericMode, Numeric Mode exiting character is unnecessary.

Under the Numeric Mode, five numeric digits are represented by threesymbol characters, where the symbol characters each have a symbol valuewithin the range of 0-47. The five digit numeric string is produced bythe equation

    A*48.sup.2 +B*48+C                                         (1)

where A, B and C are 93i symbol values. When a string of digits isencoded which is greater than five, but not an exact multiple of five,the following four rules should apply. First, one digit more than amultiple of five in a string is directly encoded by a single symbolcharacter (symbol values 00-09). Second, if the numeric string containstwo more digits than a multiple of five, the last seven digits areseparated into a set of four digits followed by a set of three digits,which are each represented as described by the third and fourth rulesbelow. Third, if a numeric string contains three digits more than amultiple of five, the three digits at the end of the string arerepresented by two symbol characters according to the equation

    48*A+B                                                     (2)

again, where A and B are 93i symbol values. Fourth, if a numeric stringcontains four digits more than a multiple of five, the last four digitsare encoded in three symbol characters under equation (1) above, wherethe resulting value under equation (1) is between 100,000 and 109,999.Table 3 below shows exemplary 5, 6, 7, 8, 9 and 10 digit strings,ranging from 12345 to 123456789, and resulting optimal symbol valuesdetermined under the Numeric Mode.

                  TABLE 3                                                         ______________________________________                                        Exemplary        Optimal Resulting                                            Data             Symbol values                                                ______________________________________                                        12345            [05][17][09]                                                 123456           [05][17][09][06]                                             1234567          [43][45][02][11][39]                                         12345678         [05][17][09][14][06]                                         123456789        [05][17][09][46][16][37]                                     1234567890       [05][17][09][29][22][18]                                     ______________________________________                                    

The ECI value is used as part of the Numeric Mode, where the symbolvalue [47] does not invoke the ECI protocol, but instead is itself usedin the 5/3 numeric compression method. If the ECI value [47] follows astring of digits encoded under the Numeric Mode, the Numeric Mode mustfirst be exited before the ECI value is used.

Symbol value 49 represents a byte mode in the 93i symbology, referred toherein as "Byte Mode." Under Byte Mode, the 93i symbology efficientlyencodes strings of full or extended ASCII data or straight byte data. A"byte" typically refers to an 8-bit set of data. Under the followingequation (3), a double-byte, or two 8-bit bytes, are encoded for each ofthree symbol characters:

    A*43.sup.2 +B*43+C                                         (3)

where A, B, and C are 93i symbol values between 0 and 42.

Under equation (3) two bytes having a combined value between 0 and65,535 are encoded as two symbol characters (i.e., 2¹⁶ =65,536). Valuesresulting from equation (3) between 65,536 to 75,535 encode four digits,while values 75,535 to 76,535 encode three digits. As a result, the ByteMode provides a 3- and 4-digit numeric compaction method to improve theinformation density for encoding strings of numeric characters while inByte Mode. Values resulting from equation (3) between 76,536 and 79,506are not defined, and cause a reader to fail a decode and output an errorsignal.

As with the Numeric Mode, Byte Mode is entered and exited using the ByteMode symbol character, having symbol value 49. The Byte Mode can also beexited by employing the Word Mode symbol character (symbol value 50) orthe Numeric Mode symbol character (symbol value 48). Additionally, ashift character [S1]-[S4], having symbol values 43-46, causes a readerto exit Byte Mode and adds 128 to symbol values for the followingcharacters. Thus, extended ASCII characters can be efficiently encodedafter exiting Byte Mode. Similarly, if one character remains at the endof a symbol, while the preceding characters are in Byte Mode, the finalcharacter is decoded at its symbol value plus 128 (as if in extendedASCII). If a symbol ends while in Byte Mode, an exiting mode character,such as a final Byte Mode symbol character (symbol value 49) isunnecessary. If two characters remain at the end of the symbol, the twocharacters are decoded at their base symbol values, as if Byte Mode hadbeen exited.

Several encoding strategies for improving symbol character encodingefficiency are permitted under the 93i symbology when in Byte Mode. Forexample, Byte Mode permits two extended ASCII data characters to beencoded as a single group of three symbol characters. For even numbersof full or extended ASCII data characters that end with an extendedASCII data character, groups of three symbol characters are employedunder Byte Mode in the 93i symbology. For odd numbers of mixed full andextended ASCII data characters ending with an extended ASCII datacharacter, the even number of characters are represented by groups ofthree symbol characters, and the last (or only) data character isencoded in one of two ways. First, if the last symbol character is anextended ASCII character, then it is encoded as a full ASCII characterpreceded by an appropriate shift character under FIG. 5. Second, if thelast character is a single full ASCII character, then it is encodeddirectly and followed by the Byte Mode character. In both cases, thelast character has a symbol value of 128 plus the value of the basecharacter or shift character (symbol value 00-46, as shown in FIG. 2).

Table 4 below presents optimal encoding of various strings of datacharacters under the Byte Mode. Recall, symbol value [49] refers to theByte Mode character, while [S?] represents one of the four shiftcharacters, having symbol values 43-46. In the third column of Table 4below, characters "A" through "F" refer to any character, having symbolvalues 00-42 in FIG. 2.

                                      TABLE 4                                     __________________________________________________________________________    No.                                                                           Chars.                                                                            Data Character Type                                                                          931 Character String                                       __________________________________________________________________________    1   Standard       A                                                          1   Full ASCII     [S?]A                                                      1   Extended ASCII [49][S?]A or [49]A[49] depending on                                           value                                                      2   Extended ASCII - then exit                                                                   [49]ABC[49]                                                3   Full/Extended then Extended-exit                                                             [49]ABC [S?]A or [49]ABC A[49]                             4   "              [49]ABC DEF[49]                                            5   "              [49]ABC DEF [S?]A or [49]ABC DEF A[49]                     .   .              .                                                          .   .              .                                                          .   .              .                                                          __________________________________________________________________________

When strings of numeric data characters are to be encoded between fullor extended ASCII data characters, additional encoding strategies areavailable under the 93i symbology to improve symbol character densities.If one or two numeric data characters are encoded between full orextended ASCII characters, then the one or two numeric characters aretreated as single full ASCII characters, having ASCII values 48 to 57 asshown in FIG. 5, depending upon the number of digits. If three to ninenumeric data characters are encoded between full and extended ASCIIcharacters, then groups of three and four digits are compressed undervalues 65536-75535 and 75536-76535 the Byte Mode. In other words, theByte Mode provides satisfactory numeric compression for 3 to 9 digitnumeric strings within strings of full or extended ASCII characters.However, with a string of 10 digits or more, the Byte Mode should beexited and the Numeric Mode entered by simply providing the Numeric Modecharacter [48] within the string of full or extended ASCII characters.

If one, two, three or four standard or base 93i data characters are tobe encoded within a string of full or extended ASCII characters, thensuch base data characters are treated as bytes. However, if five or morebase data characters are to be encoded within the middle of full orextended ASCII characters, then it is more efficient to shift out ofByte Mode by first encoding the Byte Mode character [49], directlyencode the five or more base data characters, and then reenter the ByteMode with another Byte Mode character [49]. Table 5 below providesexamples of strings of digits placed within strings of full or extendedASCII characters. In Table 5 below, the character types are separated byhyphens.

                                      TABLE 5                                     __________________________________________________________________________    Data Character Number & Type                                                                         93i Character String                                   __________________________________________________________________________    2 Extended/Full - 1 digit/Base - 1 Extended                                                          [49]ABC DEF[49]                                        2 Extended/Full - 1 digit/Base - 2 Extended                                                          [49]ABC DEF [S]A or A[49]                              2 Extended/Full - 2 digits/Base - 1 Extended                                                         [49]ABC DEF [S]A or A[49]                              2 Extended/Full - 2,3,4 digits/Standard -2 Extended                                                  [49]ABC DEF GHI[49]                                    .                      .                                                      .                      .                                                      .                      .                                                      2 Extended/Full - 10 digits - 2 Extended                                                             [49]ABC[48]DEF GHI[49]JKL[49]                          2 Extended/Full - 5 Base - 2 Extended                                                                [49]ABC[49]DEFGH[49]JKL[49]                            __________________________________________________________________________

Symbol value 50 represents a word mode in the 93i symbology, referred toherein as "Word Mode." Under the Word Mode, three symbol characters aregrouped so that their corresponding three symbol values encode a single16-bit value. Thus, three symbol characters can encode Asian charactersor 16-bit character codes. Character codes up to 65,536 are encodedunder equation (3) above.

Exiting from the Word Mode is performed with either the Word Modecharacter [50], the Byte Mode character [49], or the Numeric Modecharacter [48]. Additionally, as with the Byte Mode, a shift character[S1]-[S4], followed by a single base character, or a single symbolcharacter and the Word Mode character exit from the Word Mode and add128 to the values of single characters. If the symbol ends while in WordMode, an exit character is unnecessary. Where immediately precedingsymbol characters were encoded under the Word Mode, two symbolcharacters at the end of a symbol are decoded at their base value. Ifthe host employs an 8-bit processing architecture, then the reader inByte Mode transmits two consecutive bytes. If the host, however, employs16-bit architecture (e.g., double-bytes processed in parallel), then thereader can employ Word Mode to transmit a single double-byte word of 16bytes to the host.

Again, several strategies for increasing encoding efficiency arepermitted in the 93i symbology when in Word Mode. For example, numericstrings enclosed within characters encoded under the Word Mode arehandled in a manner similar to the Byte Mode described above, exceptstrings having value 76,536 to 76,635 encode two digits. If a singledigit is enclosed within Word Mode characters, the single digit isrepresented by [43] N, where [43] is the first shift character S1, and Nis the numeric digit. Two, three or four numeric digits enclosed withinWord Mode characters are simply represented by the appropriate Word Modevalue, in the same way as Byte Mode. With five numeric digits enclosedwithin Word Mode characters, the Word Mode should be exited and theNumeric Mode entered by simply encoding the Numeric Mode character [48].When a single base, full or extended ASCII character is enclosed withinWord Mode characters, the explicit Word Mode character values areemployed to represent the base, extended or full ASCII characters. Iftwo or more full or extended ASCII characters are encoded within WordMode characters, the Word Mode should be exited and the Byte Modeentered by again simply inserting the Byte Mode character [49]. Table 6below presents several examples of encoding strings of digits or otherdata characters efficiently under the 93i symbology under Word Mode. InTable 6 below, the value "25543" and "18776" refer to two differentUnicode 16-bit codes. Character types in the second column are separatedby hyphens.

                                      TABLE 6                                     __________________________________________________________________________    Values      Type        93i Characters                                        __________________________________________________________________________    25543       Unicode     [50]ABC[50]                                           25543, 18776                                                                              Unicode     [50]ABC DEF[50]                                       25543, 3, 18776                                                                           Unicode-digit-Unicode                                                                     [50]ABC [43]3 DEF[50]                                 25543, 3,7, 18776                                                                         Unicode-2 dig-Unicode                                                                     [50]ABC DEF GHI[50]                                   25543, A, 18776                                                                           Unicode-Std/byte-Unicode                                                                  [50]ABC DEF GHI[50]                                   25543, AB, 18776                                                                          Unicode-2 Std-Unicode                                                                     [50]ABC[50]AB[50]DEF[50]                              25543, 233, 231, 18776                                                                    Unicode-2 byte-Unicode                                                                    [50]ABC[49]ABC[50]DEF[50]                             __________________________________________________________________________

Any standard 16-bit data character encoding standard can be used by thepresent invention, for example, Unicode, JISC-6226-1983, Big Five (BF),or KSC 5609-1987. The JISC-6226-1983 standard is the Japan IndustrialStandard Character set, mapping the kanji and katakana data charactersinto 16-bit codes. This data character standard is similar to Unicode,which, as noted above, includes the kanji and katakana data characters,among others. However, each data character in the JISC-6226-1983standard is assigned a different 16-bit code for the equivalent datacharacter in the Unicode standard.

Symbol value 51 represents a function 1 (FNC1) character in the 93isymbology. The FNC1 character in the first, second or third positions ina symbol signifies compliance of that symbol with a particularapplication standard, as is known by those skilled in relevant art.Valid combinations of prefix characters preceding the FNC1 character are0-9, A-Z, 10-99, and a-z ([S4]A-[S4]Z). The FNC1 character in the fourthor subsequent positions corresponds to a transmitted group separator(<GS>) character. If the FNC1 character appears within a symbol, whilethe symbol is in Numeric, Byte or Word Mode, the FNC1 character isinterpreted as if the Numeric, Byte or Word Mode ended, a groupseparator <GS>character was transmitted and then the previous mode isreentered (i.e., Numeric, Byte or Word Mode).

If a symbol is printed with a leading space (symbol value 38), then areader stores the read symbol in a buffer, together with subsequentsymbols having leading spaces, until a symbol without a leading space isencountered. At this time, the entire contents of the buffer, i.e., allread symbols in the buffer, are transmitted, as in the Code 93symbology. As a result, a long symbol can be partitioned into severalsmaller symbols, each of the smaller symbols (except the last) having aleading space data character. If a leading space is desired as the firstdata character in a symbol, without invoking this "leading space append"feature, the Byte Mode should be used.

As explained below with respect to an exemplary decoding routine, areader that reads and decodes 93i symbol characters does not transmitthe start or stop characters or error correction characters. As with theCode 93 symbology, all data characters are transmitted, while acharacter pair beginning with one of the shift characters [S1]-[S4]causes only the single ASCII character in FIG. 5 to be transmitted.Since the 93i symbology can encode Asian and other 16-bit charactercodes, a reader will transmit 16-bit words when in Word Mode. When areader encounters a Word Mode character [50] within a symbol, togetherwith subsequently full or extended ASCII characters, or base 93i datacharacters, the reader transmits all ASCII values 0-255 as double-bytes,i.e., a first byte consisting of 8 zeros, while the second byterepresents the encoded ASCII data. If a symbol does not use the WordMode character [50], and a reader is not configured to transmitdouble-bytes, all data characters in a 93i symbol are read andtransmitted as bytes, as under the Byte Mode. Thus, use of transmitteddata as single bytes automatically provides more efficiently coded andtransmission within a reader under the 93i symbology if the readeremploys 8-bit architecture. When the ECI character [47] exists in asymbol, the same procedures are followed as with the Word Modecharacter, but only within the ECI data character that contains one ormore Word Mode characters as described below.

The 93i symbology preferably employs symbology identifiers. Symbologyidentifiers in the 93i symbology are prefixes to transmitted datadepending upon the nature of the data encoded in a symbol. In otherwords, the symbology identifier is a uniform methodology for reportingthe particular symbology read and options to set in the reader, as wellas any other features of the symbology that are encountered within aparticular symbol. The AIM USA Symbology Identifier Guideline describessymbology identifiers in greater detail. Readers can be programmed toadd the symbology identifier prefix to a given data message which istransmitted from the reader. The particular symbology identifier for the93i symbology is the same as the symbology identifier for Code 93, i.e.,"]G." Alternatively, the 93i symbology can employ a unique symbologyidentifier, such as "]i". A modifier data character or characters arethen added according to the following rules presented in Table 7 below.

                  TABLE 7                                                         ______________________________________                                        Mod.                                                                          Char.                                                                              Rule                                                                     ______________________________________                                        0    Code 93 symbol decoded, i.e., no data characters having symbol                values greater than 46 are present in the symbol.                        1    93i symbol decoded, single bytes transmitted (Word Mode                       character not present in the symbol).                                    2    FNC1 character in the first position, single bytes transmitted.          3m   FNC1 character in the second or third position, followed by the               byte value of the preceding character(s), single bytes transmitted.      4    93i symbol decoded, double bytes transmitted, including                       symbology identifiers.                                                   5    FNC1 character in the first position, double bytes transmitted.          6m   FNC1 character in the second or third position, followed by the               value of the preceding character(s), double bytes transmitted.           7    ECI character present, bytes transmitted with "\NNNNNN"             ECI                                                                           value included in the transmission, and encoded "\"                 characters                                                                    doubled. For ECI values 0-900, double-bytes are transmitted                   within the ECI when a Word Mode character is present, and bytes               otherwise. For ECI values 901-811799, the Word Mode character                 is not encoded and all characters are transmitted as bytes.              8    ECI character present, all characters are transmitted as double               bytes, including the ECI sequence.                                       9    FNC1 character in the first position, ECI character present and               single bytes transmitted.                                                Am   FNC1 character in the second or third position, followed by the               byte value of the preceding character, ECI character present and              single bytes transmitted.                                                B    FNC1 character in the first position, ECI character present and               double bytes transmitted.                                                Cm   FNC1 character in the second or third position, followed by the               byte value of the preceding character(s), ECI character present               and double bytes transmitted.                                            D-8  Structured append support                                                ______________________________________                                    

The modifier character "m" corresponds to particular applicationstandard followed and registered with AIM. The modifier character "m"occurs only when the FNC1 character is in the second or third position.

If the FNC1 character is encoded in the second position, following asingle digit prefix character, then the symbology identifier is followedby bytes for a 0, ASCII value 48, then the encoded digit, having ASCIIvalue 48-57, which are transmitted. If the FNC1 character is encoded inthe third position following two prefix digits, then the byte values ofthe two digits are transmitted follow the symbology identifier underTable 7. If the FNC1 character is encoded in the second positionfollowing an upper case alphabetic character A-Z prefix, then the singlebyte value of the alphabetic character, ASCII value of 65-90, followsthe symbology identifier. If the FNC1 character is encoded in the thirdposition following the shift character [S4] and an upper case alphabeticcharacter, then this pair of characters in the first and secondpositions represent a lower case alphabetic character, having ASCIIvalue 97-122, with this single byte value being transmitted followingthe symbology identifier.

Symbol value 52 represents a Special Features Flag character thatrepresents either use of error correction characters within the symbolor structured append features depending upon the placement of theSpecial Features Flag character within the symbol. If the SpecialFeatures Flag character is placed in the middle of the symbol, then theSpecial Features Flag character indicates the use of error correctioncharacters within the symbol. The symbol immediately following theSpecial Features Flag character indicates the message length of thesymbol. In general, the 93i symbology employs five error correctioncharacters, having symbol values 0-52. The 93i symbology usesReed-Solomon error correction methodology with a prime modulus 2 Galoisfield GF (53) with a error correction character generating polynomialdetermined by the following expansion:

    (x-2) (x-4) (x-8) (x-16) (x-32).

Symbols employing error correction can be up to a maximum length of 53symbol characters, excluding start and stop characters. Only 46 datacharacters are permitted in a symbol employing error correction sincethe 93i symbology employs modulo 53 math, and thus cannot permit asymbol having greater than 53 characters. Since 5 characters correspondto error correction characters, and 2 characters correspond to themessage length indicator and special functions flag, only 46 datacharacters remain.

To encode a symbol with error correction, a printer, computer or otherapparatus must first determine the message length L of the optimizedmessage (taking into account the various numeric, byte, word and othermodes under 93i symbology). The message length L includes the length ofthe entire data message, excluding the start and stop characters,Special Features Flag character, message length character and the fiveerror correction characters. The Special Features Flag character isplaced in the position following the character at location (L+2)/2.Inserted immediately thereafter is a Message Length character havingsymbol value L-1, indicating the length of the message, where themessage length can be between 1 and 46. Alternatively, the messagelength character can have a value of L. Thereafter, the printer,computer or apparatus calculates the five error correction charactersand places a first two of five generated error correction characters EC1and EC2 after the start character, and the remaining three errorcorrection characters EC3, EC4 and EC5 before the stop character, asshown in FIG. 10. The resulting encoded symbol is therefore: 93i Startcharacter, EC1, EC2, data (1 to 23 data characters), Special FeaturesFlag character SFlag, Message Length character MsgLength, datacharacters (0 to 22 data characters), EC3, EC4, EC5, and the stopcharacter.

An example of a symbol employing error correction characters follows.Given the character values "9, 3, 46, 18, 16, 30 and 34," such a stringof characters has a length L=8. As a result, the Special Features Flagis inserted after the fifth position ((8+2)/2=5, i.e., in the sixthposition. The Message Length character follows thereafter, and has acharacter value of 7 (i.e., 8-1=7). The resulting encoded message is "9,3, 46, 18, 50, 52, 7, 16, 30, 34," which produces the followingpolynomial:

    9x.sup.5 +3x.sup.6 +46x.sup.7 +18x.sup.8 +50x.sup.9 +52x.sup.10 +7x.sup.11 +16x.sup.12 +30x.sup.13 +34x.sup.14.

The polynomial employs modulo 53 arithmetic, where the results ofmultiplication, division, addition and subtraction are always within theGF (53) field, having a value of 0 to 52. To obtain a correct result,perform the appropriate mathematical operation and if the result isgreater than 52, successively subtract 53 until the result is in thefield of 0 to 52, and similarly if the result is less than 0, add 53until the result is within the field. For example, the numbers (-123),(-17), (89), and (407) all equal (36) under modulo 53 arithmetic.

Using Modulo 53 arithmetic, the generator polynomial is found to be x⁵+44x⁴ +21x³ +44x² +50x+39. Dividing the generator polynomial into theencode polynomial above (i.e., into 34x¹⁴ +30x¹³ +16x¹² +7x¹¹ +52x¹⁰+50x⁹ +18x⁸ +46x⁷ +3x⁶ +9x⁵ +0x⁴ +0x³ +0x² +0x+0) results in a remainderpolynomial of 13x⁴ +17x³ +24x² +12x+28. The modulo 53 complement of thecoefficients are the error correction code words E5-E1, which correspondrespectively to "40, 36, 29, 41 and 25." Therefore, the final encodedstring is "25, 41 (EC1 and EC2), 9, 3, 46, 18, 50, 52 (Special FeaturesFlag), 7 (message length character), 16, 30, 34, 29, 36 and 40 (EC3, EC4and EC5)."

Note that the Special Features Flag character 52 will always be inexactly the middle of an odd number of data characters or to the left ofthe middle for an even number of data characters. With only one datacharacter, the error correction characters EC1-EC5 are still dividedwithin the symbol. For example, with a symbol having only one datacharacter, "D", the encoded symbol, without start/stop characters is:"EC1, EC2, D, [52], [message length], EC3, EC4, EC5."

Error correction under the 93i symbology can recover up to two erroneouscharacters, an erroneous character and one or two missing characters(erasures), or up to three missing characters. Thus, a single verticalbroad stroke obscuring 3 data characters can be thereby corrected.

Furthermore, because the Special Features Flag character is in themiddle, the error correction method under the 93i symbology permitsrecovering the loss of the beginning or the end of the symbol, includinga start or stop character. By providing the Special Features Flagcharacter within the middle of the symbol, the symbol can be decoded inhalves, thereby effectively doubling its vertical redundancy (in amanner similar to the UPC symbology).

Since the five error correcting characters are divided into two groupswithin the symbol (EC1 and EC2 positioned at the beginning, and EC3-EC5positioned at the end), the resulting symbol is even further immune todamage. For example, if all of the error correction characters wereplaced at one end of the symbol, and that end were obscured or damaged,then all of the error correction characters could be lost.

The Special Features Flag character and the Message Length characterprovide important data to a symbol, in addition an indication that thesymbol includes error correction characters in the length of the symbol.By positioning the Special Features Flag character within the middle ofa symbol, a reader can determine where the middle of a symbol is, if oneend of the symbol is damaged or missing. Together with the MessageLength character, and remaining error correction characters, the readercan compensate for such damage (if not greater than that correctable bythe error correction characters). The Message Length character readilyprovides a length of the symbol to a reader which can be used, as notedabove, to facilitate error correction, as well as for other purposes.

The Special Features Flag character 52 is used as a single characterflag for multirow ordered concatenation or structured append whenpositioned in the first position following the start character. One ormore character values following the initial Special Features Flagcharacter in the first position are "modifier" characters that identifythe symbol as a member of a group of up to fifteen separate symbols thattogether form one collective single symbol. A single modifier characterhaving a character value of between 9 and 45 following the initialSpecial Features Flag character indicates a structured append group sizeof between one to five symbols. In other words, one to five additionalsymbols together with the current symbol form one larger symbol. Acharacter value of between 0 and 7, followed by a character value ofbetween 6 and 47 indicates a group size of between six and fifteensymbols.

The modifier characters are algorithmically generated based on thefollowing rules. If the first character has a character value between 9and 45, then the character value is converted into 6 bits, and the firstthree bits are the ordinal symbol value and the second three bits arethe group size. For example, 45 corresponds to the six bits 101101, orthe fifth symbol out of a group of five symbols. If the first modifiercharacter has a character value between 0 and 7, and the immediatelyfollowing subsequent character has a character value of between 6 and47, then the two characters of are converted to six bits each and jointo form a single string of twelve consecutive bits. The first three bitsand the eighth bit are always zero bits, while bits four through sevenidentify the ordinal symbol number and bits nine through twelverepresent the group size for the collective symbol. For instance, 7, 47corresponds to the twelve bit binary string 000111101111, with bits fourthrough seven being 1111 and bits nine through twelve being 1111,therefore representing the fifteenth symbol out of fifteen symbols. As afurther example, Table 8 below shows an example of modifier charactersunder the structured append of the 93i symbology.

                  TABLE 8                                                         ______________________________________                                                                       Corresponding                                                                 Modification                                                                  Character Value(s)                                                            Following Initial                              Symbol                         Special Features                               Location            Binary String                                                                            Flag Character                                 ______________________________________                                        1 of 4  001 100     001100     12                                             2 of 4  010 100     010100     20                                             3 of 4  011 100     011100     28                                             4 of 4  100 100     100100     36                                             1 of 6  000 0001 0 0110                                                                           000000 100110                                                                            0, 38                                          2 of 6  000 0010 0 0110                                                                           000001 000110                                                                            1, 6                                           3 of 6  000 0011 0 0110                                                                           000001 100110                                                                            1, 38                                          4 of 6  000 0100 0 0110                                                                           000010 000110                                                                            2, 6                                           5 of 6  000 0101 0 0110                                                                           000010 100110                                                                            2, 38                                          6 of 6  000 0110 0 0110                                                                           000011 000110                                                                            3, 6                                           ______________________________________                                    

To help ensure that a group of symbols is intended to be linkedtogether, two check characters are included after the n of n character.The first check character is computed as the modulo 43 sum of the ASCIIvalue of all of the data characters within the group of symbols (notincluding the Special Features Flag character, modifier characters, modecharacters, check or error correction characters). Similarly, the secondcheck character is computed as the modulo 43 difference of the ASCIIvalue of all of the data characters within the group of symbols,including the first check character, but excluding the Special FeaturesFlag character, modifier characters, mode characters, error correctioncharacters or other check characters.

Each symbol in a group of structured append symbols may be scanned orimaged in any order, and symbols with error correction characters may bemixed with regular 93i symbols lacking error correction characters. Thedata from all of the symbols is buffered in the reader and transmittedin the correct order with any pre- and post-amble enabled characterswithin the reader, such as carriage return (CR), line feed (LF), etc.Optionally, a reader can be configured to transmit individual symbolsusing the symbology identifier protocol explained herein. In such case,the appropriate symbology identifier is followed by a double digit pair,m of n, and prepended to the data transmission of each symbol. Forexample, if the data character string "123" is in the first of twosymbols, and the data character string 456 is in the second of twosymbols, the symbol values encoded in the first symbol are "52, 10, 1,2, 3," and the symbol values encoded in the second symbol are "52, 18,8, 4, 4, 5, 6," where 8=(49+50+51+52+53+54) mod 43, and4=(49-50-51-52-53-54) mod 43. The data transmitted from the reader istransmitted as the data character string 1, 2, 3, 4, 5, 6, CR, LF. Ifthe reader were configured to transmit individual structured appendsymbols, and the second of the two symbols were scanned first, thereader would transmit "[,G, D, 0, 2, 0, 2, 8, 4, 4, 5, 6" which is theASCII value sequence "93, 71, 68, 48, 50, 48, 50, 56, 52, 52, 53 and54."

In an alternative embodiment, each symbol in a group of structuredappend symbols includes a file marker character, instead of the firstand second check characters. Each symbol in a group of structured appendsymbols includes the same file marker character selected from any of thesymbol values 0 through 42 (data characters 0 through %). The filemarker character identifies each symbol as corresponding to theirassociated group. Symbols in a different group of structured appendsymbols therefore would have a different file marker characteridentifying each of such symbols with their corresponding group.

File marker characters may be more easy for a printer to print since theprinter need not enter into a special mode and can simply print onesymbol in a field at a time. The file marker character has the benefitof allowing a user to match files in an unbuffered mode, assuming anappropriate symbology identifier is included in the symbol or a simplesoftware program running on a host computer performs such grouping. Thefile marker character can be placed, for example, after the SpecialFeatures Flag character.

In another alternative embodiment, the Special Features Flag can be usedtogether with one or more subsequent symbol values, can be employed inseveral separate symbols to designate a complete two-dimensional symbol.For instance, the flag may be followed by a single character whose valueis made up of the position and the size of the symbol. The SpecialFeatures Flag character 52, together with the one or more subsequentsymbol values, indicate a precise location of each symbol within atwo-dimensional area to effectively form a two-dimensional symbol. Forexample, four symbols can together form a single two-dimensional symbolhaving two rows. The Special Features Flag character 52, together with afirst, subsequent symbol value, can indicate that one symbol forms theupper-left portion of the two-dimensional symbol, while the SpecialFeatures Flag symbol with a second symbol value indicates that anotherof the four symbols corresponds to the lower-right corner of thetwo-dimensional symbol. The check characters for the last symbol in thestructured append two-dimensional symbol are check characters for theentire two-dimensional symbol. A given symbol can include both theSpecial Features Flag character within the middle of the symbol toindicate that the symbol includes error correction characters, and at abeginning of the symbol to indicate use of the structured appendedfeature.

An example of data transmitted from a reader based on the symbol of FIG.1 will now be presented. The symbol of FIG. 1 encodes the string, "9, 3,i, ECI 16, {30908}" and the data transmitted would be:

    ]G7 9 3 i \00001630908

which in bytes is:

    93, 71, 55, 57, 51, 105, 92, 48, 48, 48, 48, 49, 54, 120, 128.

Note that the symbology identifier "]G7" transmitted initially with thedata includes the modifier character "7" that indicates, under Table 7that an ECI character is present and bytes are transmitted with"\NNNNNN" ECI value included in the transmission. If the reader wereconfigured to transmit all single bytes as double bytes, and double bytecharacters unchanged, the Symbology Identifier would change to "]G8",and the following byte sequence would be transmitted from the reader:

    0, 93, 0, 71, 0, 56, 0, 57, 0, 51, 0, 105, 0, 92, 0, 48, 0,48, 0, 48, 0, 48, 0, 49, 0, f, 120, 188.

Because the symbol contains an ECI character, Symbology Identifiers mustbe used, and the reader cannot decode a symbol without transmitting theSymbology Identifier characters. However, if the ECI character "\000016"was not encoded in the symbol, then it would be up to the host receivingthe transmitted data from the reader to interpret the transmittedmessage. In that case, where a Word Mode character is encoded in thesymbol, the reader must transmit the symbol as double bytes, and ifSymbology Identifiers were enabled, the correct prefix would be "]G4."Similarly, if a Word Mode character were not present in the symbol, butthe reader were configured to transmit all single bytes as double bytesand all double byte characters unchanged, the Symbology Identifier wouldstill be "]G4". Consequently, an encode string "9, 3, i, {30908}" wouldbe transmitted as:

    ]G4 9 3 i 30908

which in bytes is:

    0,93,0, 71, 0, 52,0, 57, 0, 51,0, 105, 120, 188.

FIG. 6 shows an exemplary symbol character printing apparatus 100. Theapparatus 100 consists of a printer 102, a central processing unit (CPU)104, a memory 106, a keyboard 107 and a secondary storage 108. Theprinter 102 is of a type generally known which can print bar codes andhuman readable data characters. Those skilled in the art may select fromany such printers which are suitable for use in the present invention.The CPU 104 is electrically coupled to a host computer, or otherapparatus or applications, by a port or line 109. The CPU 104, executinga routine (FIG. 7) stored in the memory 106 and/or the secondary storage108, converts a 16-bit data character code into counts which are sent tothe printer 102. The printer 102 interprets these counts and convertsthem into printed symbol characters, typically in the form of a bar codelabel. A "label" generally refers to any paper, cloth, plastic, metal orother pliable or rigid material suitable for having one or more symbolcharacters and/or data characters printed or formed thereon. Thoseskilled in the relevant art, however, will recognize that the term"label" also refers to any symbol characters printed on an object, suchas packaging for a consumer product, or relief formed on an object. Theprinted label can include both symbol characters and the correspondinghuman readable data characters. The label 101 of FIG. 1 is an example ofa label printed or read under embodiments of the present invention.

FIG. 7 shows exemplary steps performed by the printing apparatus 100 ofFIG. 6 under a routine 111 for printing a bar code label having multiplesymbol characters and with corresponding data characters. In step 110, astring of data characters are selected, input or determined, forexample, such as input using the keyboard 107. The string of datacharacters may also be input to the CPU 104 over the line 109 from thehost computer 105. When a key is depressed on the keyboard 107, thekeystroke is converted into a "scan code" which is transmitted from thekeyboard to the device to which the keyboard is connected (e.g., theprinting apparatus 100 or the host computer 105). This scan coderepresents the particular key of the keyboard which has been depressed,and is unrelated to any particular character or value in a datacharacter set, such as ASCII or Unicode.

In step 112, the CPU 104 divides or parses the selected characters intovarious sets of data characters, such as alphabetic characters, numericcharacters, 8-bit bytes, 16-bit words or characters, etc. Data parsingtechniques are well known in the relevant art. In step 114, the CPU 104defines any special characters, such as shift characters [S1]-[S4], modecharacters, such as numeric, byte and word mode characters [48], [49] or[50], respectively, etc. Additionally, in step 114, the CPU 104determines whether any ECI numbers are to be encoded in the symbol.

In step 116, the CPU 104 determines an optimized string of symbolcharacters based on the selected data characters. For example, if fiveconsecutive data characters are numeric, then the CPU 104 determinesthat the Numeric Mode should be employed to reduce the number of symbolcharacters and thereby increase information density of the resultingsymbol. CPU 104 in step 116 employs the rules and suggestions presentedabove for increasing information density in a symbol (e.g., as shown inTables 4-6).

In step 118, the CPU 104 determines the symbol value for each datacharacter. A table of data characters and their corresponding symbolvalues is preferably stored in the secondary storage 108, along with thecounts for the corresponding symbol characters, such as the tables ofFIGS. 2 and 5. Alternatively, the symbol values can be automaticallycalculated from knowledge of the data characters. The CPU 104 in step118 encodes selected data characters into symbol characters selectedfrom the table of FIG. 2 based on the appropriate routine describedherein. For example, if the CPU 104 encounters a string of three or fivedigits, the CPU employs equations (1) and (2), respectively, which aredescribed above. If bytes are to be encoded, then the CPU 104 employsthe equation (3).

In step 120, the CPU 104 determines whether the symbol is to employerror correction characters. If so, then the CPU generates errorcorrection characters as explained above. Alternatively, the CPU 104generates the check characters "C" and "K" by employing theabove-described check character algorithm. In step 122, the CPU 104chooses a suitable X-dimension for the symbol based on, in part, thenumber of symbol characters to be printed. In step 124, the CPU 104chooses other format options, such as printing the symbol with the humanreadable data characters, or other format options known by those skilledin the relevant art. In step 126, the CPU 104 outputs the appropriatecodes and other signals to the printer 102, which in turn prints thesymbol as a series of symbol characters (and possibly data characters)to form the bar code label.

The 93i symbology can also be readily read using a bar code readingapparatus such as a bar code reading apparatus 140, shown in FIG. 8. Thereading apparatus 140 has a standard bar code reader 142. The bar codereader 142 includes an electro-optical device 143 such as a laserscanner, rasterizing laser, or wand-based optical transducer.Alternatively, the electro-optical device 143 in the reader 142 caninclude a one- or two-dimensional CCD, semiconductor array, vidicon, orother area imager capable of converting received light into electricalsignals. The electro-optical device 143 in the reader 142 can alsoinclude a light source such as an LED, flash bulb, infrared lightsource, or other light-emitting element. As used generally herein, theterm "reader" refers to any device capable of converting modulated lightreceived from a bar code into electrical signals. Readers are known bythose skilled in the art, and any such reader suitable for use in thepresent invention can be selected. The data read from the bar codereader 142 is input to a CPU 144. A memory 146 and a secondary storage148 are coupled to the CPU 144. The data input to the bar code reader142 is processed by the CPU 144 and output to a host computer 147, orother apparatus or applications, by a port or line 149. Alternatively,the data can be output via a wireless link.

FIG. 9 shows the steps performed under a routine 150 by the readingapparatus 140 of FIG. 8 for reading bar code symbols having symbolcharacters from the present symbology. In step 151, the bar code reader142 scans or images the symbol characters of a bar code label anddetermines the width of the elements, e.g., by determining a series ofcounts. As is known by those skilled in the art, the transitions betweenbars in the symbol characters, together with a timer within the readingapparatus 140, determine the counts of the symbol characters read. Thecounts in turn are used to determine the widths of elements in a givensymbol. In step 152, the CPU 144 analyzes the counts, to locate thequiet zones on both sides of the symbol.

In step 154, the CPU 144 selects the first 6 counts, which represent thefirst string of 6 element widths. In step 156, the CPU 144 divides thefirst six counts by 9 and normalizes the result to estimate the widthsof the individual elements. In step 158, the CPU 144 compares the widthsof the first 6 elements to the string of widths for the start characterand with the reverse string of widths for the stop character. If thelast 6 elements in the string correspond to the 6 elements from thestart character, but in reverse, the CPU 144 recognizes that the symbolhas been scanned in reverse, and therefore recognizes that the symbol isto be read from right to left (as opposed to the traditional left toright).

In step 160, the CPU 144 selects the next 6 elements, and in step 162,divides the sum of the elements (counts) by 9 and normalizes the result.In step 164, the CPU 144 determines the symbol value for the selected 6elements. In step 166, the CPU 144 determines if the label contains anyadditional elements and if so, loops back to step 160 to perform thesteps 160 through 164 again until all of the symbol characters have beenconverted into symbol values.

In step 168, the CPU 144 determines if any invalid/undecodable symbolcharacters have been generated. If some symbol characters are determinedto be undecodable, then the routine loops back to step 160 and the CPU144 performs other known decode methods, such as edge-to-edge (elementpairs) decoding for individual elements in the symbol. Alternatively, instep 168, the CPU 144 performs bar-to-bar or space-to-space comparisons,or Factor R decoding methods, known to those skilled in the art.

In step 168, the CPU 144 can also verify or determine whether the symbolcharacters are in focus. The CPU 144 analyzes the signals produced bythe bar code reader 142 for the symbol characters to determine whetherthe CPU can recognize the wide elements but fail to recognize theone-wide elements. If the CPU 144 cannot recognize the one-wide elementsin one or more symbol characters, the CPU aborts the decode routine,provides unfocused data to the CPU, or performs other functions such asalerting the user that the symbol is not in focus. If the CPU 144 issufficiently programmed, it can decode the unfocused data based on thepresent inventor's U.S. Pat. Nos. 5,486,689, 5,514,858, 5,539,191 and/orU.S. patent application Ser. No. 08/493,669, filed Oct. 12, 1996.

If the symbol is in focus or if the CPU 144 decodes the unfocused data,so that all of the symbol values are valid (i.e., map to datacharacters) then in step 170, the CPU performs the check calculationbased on the last two symbol characters. Alternatively, if the symbolincluded error correction characters, then the CPU 144 employs errorcorrection. If the check characters check or error correction isperformed under the above algorithms, then in step 171, the CPU 144converts the symbol values into data characters based on a look-uptable, by retrieving the appropriate data characters from the memory 146or the secondary storage 148 depending upon where the appropriate datais stored. The data characters can then be displayed, or used in otherapplications by the CPU 144, or output over the line 149 to the hostcomputer 147. In step 171, the CPU 144 also interprets any shift or Modesymbol values, such as symbol values 48-50 for the Numeric, Byte andWord Modes, respectively. When the CPU 44 encounters one of the Modecharacters, or other special characters (symbol values 43--52), the CPUenters the appropriate mode or decodes the symbol values as describedabove. Alternatively, the CPU 144 can simply output the symbol valuesover the line 149 to the host computer 147, which in turn performs theconversion into the corresponding data characters.

Although specific embodiments of, and examples for, the presentinvention have been described above for illustrative purposes, variousequivalent modifications may be made without departing from the spiritand scope of the invention. For example, if the memory 106 or 146 issufficiently large to contain all data required by the CPU 104 or 144for encoding, decoding, printing or reading bar code labels, thesecondary storage 108 or 148 is unnecessary and thus eliminated.Alternatively, the data required by the CPU 104 or 144 may be containedin the secondary storage 108 or 148, thus eliminating the need for alarge memory 106 or 146 or the need for this memory entirely. Regardingthe 93i symbology, the symbol characters can be allocated to differentdata characters than as described above with respect to FIG. 2. The FNC1character 51, or the Special Features Flag character 52 can be used tolatch into a mode for encoding other sets of data characters. Forexample, the Word Mode character 50 can be used to encode the Unicodecharacters, while the Special Features Flag character 52 can latch toencode the JISC-6226-1983 characters if positioned at the end of asymbol.

In an alternative embodiment, the 93i symbology can omit the SpecialFeatures Flag character in the middle of a symbol. Instead, the symbolcan always employ error correction characters. If a user, printer, orcomputer wishes to produce a shorter printed symbol, then the errorcorrection characters can simply be suppressed. As a result, a symbol isprinted without the five error correction characters.

In a further alternative embodiment, the 93i symbology can employ anError Correction Level Indicator character. The Error Correction LevelIndicator character indicates a level or amount of error correctionemployed by a given symbol. For example, the Error Correction LevelIndicator character can have one of three values, corresponding to useof three, five, or seven error correction characters within the symbol,respectively. The Error Correction Level Indicator character ispreferably positioned proximate to the Special Features Flag character,such as after the Message Length Indicator character.

In yet another alternative embodiment, the Special Features Flagcharacter can be positioned at another location within the symbol,rather than the middle of the symbol. For example, the Special FeaturesFlag character can be positioned at a position in the symbolcorresponding to (L+2)/2. The Message Length Indicator character canthen be positioned at an equally spaced location, such as at location(2L+2)/3. Of course, the Special Features Flag and Message LengthIndicator characters can be positioned at other locations within thesymbol.

Additionally, the present invention can incorporate the teachings of theU.S. Patents and/or applications described herein to provide additionalbenefits and functionality. The U.S. Patents and applications citedabove are incorporated herein by reference as if set forth in theirentirety. Features of the present invention can be applied to othersymbologies. For example, the use of the Special Features Flag can beemployed in any of the bar code standards or machine-readablesymbologies to employ two different functions based on the position ofsuch character. Furthermore, aspects of the 93i symbology has beengenerally described herein as being incorporated into a linear bar codesymbology; alternatively, such aspects of the 93i symbology can beemployed in a stacked symbology such as PDF417 or in an area symbologysuch as Code One.

These and other changes can be made to the invention in light of theabove detailed description. In general, in the following claims, theterms should not be construed to limit the invention to the specificembodiments disclosed in the specification and claims, but should beconstrued to include all apparatus, methods and symbologies for directlyencoding various data characters, such as 8-bit bytes, 16-bit charactercodes, ECI numbers, etc. Accordingly, the invention is not limited bythe disclosure, but instead its scope is to be determined entirely bythe following claims.

We claim:
 1. A set of machine-readable symbols corresponding to a set ofdata characters, the set of symbols comprising a plurality of adjacentlypositioned shapes having spaces between the shapes, groups of at leastthree shapes and three spaces defining one of at least fifty individualdata characters, wherein a plurality of the groups of shapes and spacesform a printable symbol, and wherein a predetermined group of shapes andspaces in the set of symbols indicates that at least one errorcorrection character is present within the printable symbol, and whereinan absence of the predetermined group of shapes and spaces in theprintable symbol indicates an absence of error correction characters inthe printable symbol.
 2. The set of machine-readable symbols of claim 1wherein the predetermined group of shapes and spaces indicates whenpositioned at a first position in the printable symbol that the errorcorrection character is present within the printable symbol, andindicates when positioned in a second position within the printablesymbol that the printable symbol corresponds to a selected one of agroup of printable symbols.
 3. The set of machine-readable symbols ofclaim 1 wherein the predetermined group of shapes and spaces ispositioned at a location (L+2)/2 within the printable symbol, where L isa number of data characters to be encoded in the printable symbol. 4.The set of machine-readable symbols of claim 1, further comprising atleast one check character in the printable symbol, the check characterbeing generated based on a modulo sum algorithm, and wherein an errorcorrection algorithm generates the at least one error correctioncharacter based on a Reed-Solomon algorithm.
 5. The set ofmachine-readable symbols of claim 1 wherein at least a first errorcorrection character is positioned proximate to a beginning of theprintable symbol, and at least a second error correction character ispositioned proximate to an end of the printable symbol.
 6. The set ofmachine-readable symbols of claim 1, further comprising a message lengthcharacter having a value indicative of a number of data characters to beencoded in the printable symbol, and wherein the message lengthcharacter is positioned in the printable symbol adjacent to thepredetermined group of shapes and spaces.
 7. The set of machine-readablesymbols of claim 1 wherein one of the groups of shapes and spacesrepresents a byte mode data character, wherein the byte mode characterindicates that subsequent groups of shapes and spaces correspond to atleast one character code having 8 bits.
 8. The set of machine-readablesymbols of claim 1 wherein one of the groups of shapes and spacesrepresents a word mode data character, wherein the word mode datacharacter indicates that subsequent groups of shapes and spacescorrespond to at least one 16-bit character code.
 9. A machine-readablesymbology having a plurality of symbol characters, the machine-readablesymbology comprising an error correction flag symbol character thatindicates that at least one error correction symbol character is presentwithin a group of symbol characters, and wherein an absence of the errorcorrection flag in the group of symbol characters indicates an absenceof error correction characters in the group of symbol characters. 10.The machine-readable symbology of claim 9 wherein the error correctionflag symbol character indicates when positioned at a first position inthe group of symbol characters that the error correction symbolcharacter is present, and indicates when positioned in a second positionthat the group of symbol characters corresponds to a selected one of aset of printable symbols.
 11. The machine-readable symbology of claim 9wherein the error correction flag symbol character is positioned at alocation proximate to a middle of the group of symbol characters. 12.The machine-readable symbology of claim 9, further comprising at leastone check symbol character in the group of symbol characters, the checkcharacter being generated based on an algorithm differing from an errorcorrection algorithm that generates the at least one error correctionsymbol character.
 13. The machine-readable symbology of claim 9, furthercomprising a message length symbol character in the group of symbolcharacters, wherein the message length symbol character has a valueindicative of a number of data characters to be encoded in the group ofsymbol characters.
 14. The machine-readable symbology of claim 9 whereinthe error correction flag symbol character includes a plurality ofadjacently positioned bars having spaces between the bars, wherein thebars have one of at least two widths.
 15. The machine-readable symbologyof claim 9 wherein the error correction flag symbol character includes aplurality of adjacently positioned bars having spaces between the bars,wherein the spaces have at least one of two widths.
 16. Themachine-readable symbology of claim 9 wherein the error correction flagsymbol character includes a plurality of adjacently positioned barshaving spaces between the bars, wherein the bars have one of at leasttwo heights.
 17. A machine-readable symbology having a plurality ofsymbol characters, wherein a group of symbol characters form a printablesymbol, the machine-readable symbology comprising a Special FeaturesFlag symbol character that indicates use of error correction whenpositioned at a first location within the printable symbol, and thatindicates a second function when positioned at a second location withinthe printable symbol.
 18. The machine-readable symbology of claim 17wherein the Special Features Flag symbol character indicates whenpositioned at the first position that error correction symbol charactersare present within the group of symbol characters, and indicates whenpositioned in the second position that the group of symbol characterscorresponds to a selected one of a set of printable symbols.
 19. Themachine-readable symbology of claim 17 wherein the first location isproximate to a middle of the group of symbol characters.
 20. Themachine-readable symbology of claim 17 wherein the Special Features Flagsymbol character positioned at the second location corresponds to aselected one of a set of printable symbols, and wherein a group ofsymbol characters includes a selected symbol character identifying thegroup of symbol characters with the set of printable symbols.
 21. Amethod of converting data characters to machine-readable symbols, eachsymbol having a pattern of dark shapes and light spaces between theshapes, the method comprising:determining a plurality of character codescorresponding to a plurality of data characters, respectively;converting the plurality of character codes to a plurality of symbolvalues; computing error correction values based at least some of theplurality of symbol values; and printing a plurality of symbolcharacters, wherein the plurality of symbols correspond to the pluralityof symbol values, to the error correction values, and to a SpecialFeatures Flag symbol character indicating that the plurality of symbolcharacters includes at least one symbol character corresponding to atleast one error correction value.
 22. The method of claim 21 whereinprinting includes printing a plurality of symbol characters selectedfrom a symbology having three shapes and nine modules per symbolcharacter.
 23. The method of claim 21 wherein printing includes printingthe Special Features Flag symbol character at a first position in theplurality of symbol characters to indicate a first mode wherein theplurality of symbol characters includes at least one symbol charactercorresponding to at least one error correction value, and printing theSpecial Features Flag symbol character in a second position in theplurality of symbol characters to indicate a second mode.
 24. The methodof claim 21 wherein printing includes printing the Special Features Flagsymbol character proximate to a middle of the plurality of symbolcharacters.
 25. The method of claim 21 wherein printing includesprinting a message length symbol character in the plurality of symbolcharacters.
 26. The method of claim 21, further comprising:selecting afirst number of digits; converting the first number of digits to asecond number of symbol values, the second number being less than thefirst number; printing the second number of symbol characterscorresponding to the second number of symbol values; and printing anadditional symbol character, wherein the additional symbol characterindicates that at least the second number of symbol characterscorrespond to digits.
 27. The method of claim 21, furthercomprising:selecting a number corresponding to preselected datainterpretable by a computer; converting the number to at least oneselected symbol value; printing at least one selected symbol charactercorresponding to the at least one selected symbol value; and printing anadditional symbol, wherein the additional symbol indicates that the atleast one selected symbol corresponds to one of a plurality ofpredetermined numbers.
 28. The method of claim 21, further comprisingprinting an additional symbol character, wherein the additional symbolcharacter indicates that the plurality of symbol characters correspondto a selected position within a structured set of symbols.
 29. Themethod of claim 21 wherein printing includes printing sever al symbolsselected from a standard bar code symbology.
 30. A method of decoding abar code label formed on a surface, the method comprising:imaging thebar code label to produce a signal representative of each of a pluralityof symbol characters therefrom; analyzing the signal to identify thesymbol characters; and converting each symbol character into acorresponding symbol value, wherein a predetermined one of the pluralityof symbol values indicates that at least one error correction symbolcharacter is present within the plurality of symbol characters, andwherein an absence of the predetermined one of the plurality of symbolvalues indicates that no error correction symbol characters are presentwithin the plurality of symbol characters.
 31. The method of claim 30wherein converting first determines whether check characters in theplurality of symbol characters check, and if not, then employing theerror correction characters.
 32. The method of claim 30 whereinconverting includes first determining whether the predetermined one ofthe plurality of symbol values is proximate to a middle of the pluralityof symbol characters before determining that at least one errorcorrection symbol character is present within the plurality of symbolcharacters.
 33. A printer apparatus for printing machine-readablesymbols comprising:a processor that converts a plurality of charactercodes to a plurality of symbol values, wherein the plurality ofcharacter codes correspond to a plurality of data characters,respectively, wherein a predetermined one of the plurality of charactercodes indicates that at least one error correction symbol character isto be positioned within a printable symbol, and wherein an absence ofthe predetermined one of the plurality of character codes indicates anabsence of error correction symbol characters in the printable symbol;and a printer mechanism coupled to the processor that prints a pluralityof symbol characters as the printable symbol, wherein the plurality ofsymbol characters correspond to the plurality of symbol values,respectively.
 34. A reader apparatus for reading machine-readablesymbols comprising:an optical receiver that receives light reflectedfrom a plurality of symbols and produces a signal representing theplurality of symbol characters; and a processor coupled to the opticalreceiver that receives the signal and converts the plurality of symbolcharacters to a plurality of symbol values, wherein a predetermined oneof the plurality of symbol values indicates that at least one errorcorrection symbol character is located within the plurality of symbols,and wherein an absence of the predetermined one of the plurality ofsymbol values indicates an absence of error correction symbol characterswithin the plurality of symbols.
 35. A set of bar code symbolscorresponding to a set of data characters, the set of bar code symbolscomprising a plurality of adjacently positioned bars having spacesbetween the bars, wherein a plurality of groups of bars and spaces forma non-stacked printable symbol, and wherein at least two groups of barsand spaces in the printable symbol are error correction characters. 36.The set of bar code symbols of claim 35, further comprising apredetermined group of bars and spaces that indicate that the at leasttwo groups of bars and spaces are present within the printable symbol.37. The set of bar code symbols of claim 36 wherein the predeterminedgroup of bars and spaces is positioned at a location (L+2)/2 within theprintable symbol, where L is a number of data characters to be encodedin the printable symbol.
 38. The set of bar code symbols of claim 35wherein at least a first error correction character is positionedproximate to a beginning of the printable symbol, and at least a seconderror correction character is positioned proximate to an end of theprintable symbol.
 39. The set of bar code symbols of claim 35 whereinone of the groups of bars and spaces represents a error correction levelindicator character, wherein the error correction level indicatorcharacter indicates a level of error correction employed in the groupsof bars and spaces in the printable symbols.
 40. A set ofmachine-readable symbols corresponding to a set of data characters, theset of machine-readable symbols comprising a plurality of adjacentlypositioned shapes having spaces between the shapes, wherein a pluralityof groups of shapes and spaces form a printable symbol and wherein atleast first and second groups of shapes and spaces in the printablesymbol are first and second error correction characters, and wherein thefirst and second groups of shapes and spaces are positionednonadjacently within the printable symbol, and wherein the first andsecond groups are positioned at opposite ends of the printable symbol.41. The set of machine-readable symbols of claim 40, wherein the set ofmachine-readable symbols includes start and stop characters positionedat opposing ends of the printable symbol, and wherein the first andsecond error correction characters are positioned proximate to the startand stop characters, respectively.
 42. The set of machine-readablesymbols of claim 40, further comprising a predetermined group of shapesand spaces that indicate that the printable symbol includes the firstand second error correction characters.
 43. A set of machine-readablesymbols corresponding to a set of data characters, the set ofmachine-readable symbols comprising a plurality of adjacently-positionedshapes having spaces between the shapes, wherein a plurality of groupsof shapes and spaces form a printable symbol and wherein at least firstand second groups of shapes and spaces in the printable symbol are firstand second error correction characters, and wherein the first and secondgroups of shapes and spaces are positioned in the printable symbol withat least some of the plurality of groups of shapes and spaces positionedtherebetween.